#！/usr/bin/python 
# -*- coding:utf-8 -*-  
# @Time: 2019/6/7 15:44   
# @Author: Envy   
# @File: serializers.py

from rest_framework import serializers
from index.models import Type, Product

# 定义Serializers类
# 设置下拉内容
type_id = Type.objects.all().values('id')  # values()方法可以保证只输出所指定的字段信息，这也是一个列表
TYPE_CHOICES = [item['id'] for item in type_id]


# 这个就是直接根据字段来的，这个非常和初始的form相似
class ProductSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField(required=True, allow_blank=False, max_length=100)
    weight = serializers.CharField(required=True, allow_blank=False, max_length=100)
    size = serializers.CharField(required=True, allow_blank=False, max_length=100)
    type = serializers.ChoiceField(choices=TYPE_CHOICES, default=1)

    # 重写create函数，将APi数据保存到数据表index_product
    def create(self, validated_data):
        """
        根据提供的验证过的数据创建并返回一个新的product实例。
        """
        return Product.objects.create(**validated_data)

    # 重写update函数，将APi数据更新到数据表index_product

    def update(self, instance, validated_data):
        """
        根据提供的验证过的数据更新和返回一个已经存在的product实例。
        """
        instance.name = validated_data.get('name', '')
        instance.weight = validated_data.get('weight', '')
        instance.size = validated_data.get('size', '')
        instance.type = validated_data.get('type', '')
        instance.save()
        return instance


# 这个就和数据表单modelform非常相似
class ProductModelSerializer(serializers.ModelSerializer):
    # 将模型与序列化对象绑定
    class Meta:
        # 绑定模型
        model = Product
        # fields属性用于设置转换字段，'__all__'是将全部模型字段转换成待序列化字段
        # fields = '__all__'
        fields = ['id', 'name', 'weight', 'size', 'type']




